package com.jt.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jt.mapper.ItemDescMapper;
import com.jt.mapper.ItemMapper;
import com.jt.pojo.Item;
import com.jt.pojo.ItemDesc;
import com.jt.vo.EasyUITable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Arrays;
import java.util.List;

@Transactional
@Service
public class ItemServiceImpl implements ItemService {

	@Autowired
	private ItemMapper itemMapper;

	@Autowired
	private ItemDescMapper itemDescMapper;

	/**
	 * 在进行分页查询是,MP必须添加配置类
	 * <p>
	 * 利用MP机制,实现商品查新
	 *
	 * @param page 当前页
	 * @param rows 当前页显示数
	 * @return
	 */
	@Transactional(readOnly = true)
	@Override
	public EasyUITable findItemByPage(Integer page, Integer rows) {

		//查询条件,根据更新时间进行排序
		QueryWrapper<Item> wrapper = new QueryWrapper<>();
		wrapper.orderByDesc("updated");

		//当用户将参数传递之后,MP会自己执行分页操作后,将需要的数据进行封装
		//定义分页对象
		IPage<Item> iPage = new Page<>(page, rows);
		//
		iPage = itemMapper.selectPage(iPage, wrapper);
		//
		int total = (int) iPage.getTotal();
		//获取分页后结果
		List<Item> records = iPage.getRecords();

		return new EasyUITable(total, records);
	}

	//加事务
	@Override
	public void saveItem(Item item, ItemDesc itemDesc) {
		//1.默认商品为上架状态
		item.setStatus(1);
		itemMapper.insert(item); //保存成功后才有主键,将主键动态返回
		//MP支持,用户的操作可以实现自动的主键回显功能
		//int a = 1/0;

		//完成商品详情入库操作	要求item的ID应该与itemDesc的id是一致的
		//知识点: id如何获取
		itemDesc.setItemId(item.getId());
		itemDescMapper.insert(itemDesc);
	}

	@Override
	public void deleteItem(Long... ids) {
		//删除商品表信息
		itemMapper.deleteBatchIds(Arrays.asList(ids)); //mp的api
		//itemMapper.deleteByIds(ids); //手写sql

		//删除商品描述表信息
		itemDescMapper.deleteBatchIds(Arrays.asList(ids));
	}

	@Override
	public void updateItem(Item item, ItemDesc itemDesc) {
		//更新商品信息
		itemMapper.updateById(item);

		//更新商品描述表信息
		itemDesc.setItemId(item.getId());
		itemDescMapper.updateById(itemDesc);
	}

	@Override
	public void updateStatus(Integer status, Long... ids) {
		UpdateWrapper<Item> wrapper = new UpdateWrapper<>();
		List<Long> idList = Arrays.asList(ids);
		wrapper.in("id", idList); //根据id找到对应数据
		Item item = new Item();
		item.setStatus(status); //下架改成2,上架改成1
		itemMapper.update(item, wrapper);
	}

	@Override
	public ItemDesc findItemDescById(Long id) {
		ItemDesc itemDesc = itemDescMapper.selectById(id);
		return itemDesc;
	}

	/**
	 * @param page
	 * @param rows
	 * @return
	 */
	/*@Override
	public EasyUITable findItemByPage(Integer page, Integer rows) {
		//计算起始位置
		int startIndex = (page - 1)*rows;
		List<Item> itemList = itemMapper.findItemByPage(startIndex,rows);

		Integer count = itemMapper.selectCount(null);

		return new EasyUITable(count, itemList);
	}*/
}
